package base

/*
* @author: hjz
* @time: 2025/4/28 20:44
* 利用首行和首列来记录矩阵的变化，还要记录首行和首页是否发生了变化
* 第二次遍历必须从 1行 1列开始
 */
func setZeroes(matrix [][]int) {
	col := len(matrix[0])
	row := len(matrix)
	firstRow, firstCol := false, false
	for i := 0; i < row; i++ { // 列
		for j := 0; j < col; j++ { // 行
			if matrix[i][j] == 0 {
				if i == 0 { // 第一行
					firstRow = true
				}
				if j == 0 { // 第一列
					firstCol = true
				}
				// 将对应的 i,j 标志位 0
				matrix[0][j] = 0
				matrix[i][0] = 0
			}
		}
	}
	for i := 1; i < row; i++ { // 我们再遍历除了首行首列，如果改行的元素为0那么这个元素为0
		for j := 1; j < col; j++ {
			if matrix[0][j] == 0 || matrix[i][0] == 0 {
				matrix[i][j] = 0
			}
		}
	}
	if firstRow {
		for i := range matrix[0] {
			matrix[0][i] = 0
		}
	}
	if firstCol {
		for i := 0; i < len(matrix); i++ {
			matrix[i][0] = 0
		}
	}
}
func setZeroes1(matrix [][]int) {
	t, l := false, false
	for i, row := range matrix { // 列
		for j, item := range row { // 行
			if item == 0 {
				if i == 0 {
					t = true
				}
				if j == 0 { // 列为0
					l = true
				}
				matrix[0][j] = 0
				matrix[i][0] = 0
			}
		}
	}
	for i := 1; i < len(matrix); i++ { // 我们再遍历除了首行首列，如果改行的元素为0那么这个元素为0
		for j := 1; j < len(matrix[0]); j++ {
			if matrix[0][j] == 0 || matrix[i][0] == 0 {
				matrix[i][j] = 0
			}
		}
	}
	if t {
		for i := range matrix[0] {
			matrix[0][i] = 0
		}
	}
	if l {
		for i := 0; i < len(matrix); i++ {
			matrix[i][0] = 0
		}
	}
}
